package licode.unisop.client.api;

import licode.unisop.client.info.SiAuthorityAction;
import licode.unisop.client.info.SiPermitAction;
import licode.unisop.client.info.SiRoleAction;
import licode.unisop.client.info.SopPlatAuthInfo;
import licode.unisop.client.vo.SopAuthPlatform;
import licode.unisop.client.vo.SopUrl;
import licode.unisop.client.vo.SopVerifyCode;

import java.util.List;

/**
 * 定义平台的处理接口
 *
 * @author WR
 */
public interface SopPlatform {
    SopUriFilter getUriFilter();
    void registerUriFilter(SopUriFilter sopUriFilter);

    AuthCallback getAuthCallback();
    void registerAuthCallback(AuthCallback authCallback);

    boolean isValid();

    void updateAuthInfo(SopAuthPlatform authPlat);
    SopAuthPlatform getAuthPlatform();

    /**
     * 验证平台
     * @param authInfo 认证信息
     */
    SopAuthPlatform auth(SopPlatAuthInfo authInfo);

    String getId();
    String getRealmId();
    String getName();
    String getToken();
    String getModalToken();
    String getTicketUri();

    /**
     * 匹配当前环境的地址
     * @param url 需要匹配的地址
     * @return 成功返回0；-1：未匹配；1：用户未登录
     */
    int matchUri(String url);

    /**
     * 判断登录token是否拥有指定的角色
     * @param info 登录后返回的访问token
     * @return 如果拥有指定角色返回0；没有登录返回1；其它小于0
     */
    SopVerifyCode hasRole(SiRoleAction info);

    /**
     * 判断登录token是否拥有指定的权限
     * @param info 登录后返回的访问token
     * @return 如果拥有指定权限返回0；没有登录返回1；其它小于0
     */
    SopVerifyCode hasPermit(SiPermitAction info);

    SopVerifyCode hasAuthority(SiAuthorityAction info);
}
